using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Microsoft.ApplicationBlocks.Data;
using Common; using MinCultura.Sipa.DataAccess.EntidadesArtes;
using SystemFrameworks;

namespace MinCultura.Sipa.EntidadesArtes
{
	/// <summary>
	/// Clase de acceso a datos para la entidad ART_TIPO_ENTIDAD_ARTISTICA
	/// </summary>
	public class TipoEntidadArtistica 
	{
		#region Private Data Access Atributes

		private const String TEA_ID_PARAM = "@TEA_ID";
		private const String TEA_DESCRIPCION_PARAM = "@TEA_DESCRIPCION";
		private const string TEA_AREA_ID_PARAM = "@TEA_AREA_ID";

		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase ARTTIPOENTIDADARTISTICA
		/// </summary>
        public TipoEntidadArtistica(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

		public TipoEntidadArtisticaData BuscarTipoEntidadArtistica()
		{
			TipoEntidadArtisticaData response = new TipoEntidadArtisticaData();
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_TIPO_ENTIDAD_ARTISTICA", response.Tables[0]);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		/// <summary>
		/// Busqueda de Tipos por Area Artistica
		/// </summary>
		/// <param name="AreaId">ID del Area</param>
		/// <returns></returns>
		public TipoEntidadArtisticaData BuscarTipoEntidadArtistica(decimal AreaId)
		{
			TipoEntidadArtisticaData response = new TipoEntidadArtisticaData();
			SqlParameter param1 = new SqlParameter(TEA_AREA_ID_PARAM, AreaId);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_TIPO_ENTIDAD_ARTISTICA", response.Tables[0],parameters);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		public TipoEntidadArtisticaData ConsultarTipoEntidadArtistica(decimal parTEA_ID)
		{
			TipoEntidadArtisticaData response = new TipoEntidadArtisticaData();

			SqlParameter param1 = new SqlParameter(TEA_ID_PARAM, parTEA_ID);

			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_TIPO_ENTIDAD_ARTISTICA", response.Tables[0], parameters);
			if (response.Tables[0].Rows.Count == 0)
				return null;
			return response;
		}

		public decimal AdicionarTipoEntidadArtistica(TipoEntidadArtisticaData datos)
		{
			DataTable tabla = datos.Tables[TipoEntidadArtisticaData.ART_TIPO_ENTIDAD_ARTISTICA_TABLE];
			decimal decTEA_ID = 0;

			try
			{
                //StartTransaction();

				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(TEA_ID_PARAM, SqlDbType.Decimal);
					param1.Direction = ParameterDirection.Output;
					SqlParameter param2 = new SqlParameter(TEA_DESCRIPCION_PARAM, row[TipoEntidadArtisticaData.TEA_DESCRIPCION_FIELD]);
					SqlParameter param3 = new SqlParameter(TEA_AREA_ID_PARAM, row[TipoEntidadArtisticaData.TEA_AREA_ID_FIELD]);
					
					SqlParameter[] parameters = {param1, param2,param3};

					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_TIPO_ENTIDAD_ARTISTICA", parameters);

					decTEA_ID = decimal.Parse(param1.Value.ToString());
				}

                //if (this.RegistroAuditoria != null)
                //{
                //    this.RegistroAuditoria.Rows[0][RegistroAuditoriaData.REG_IDENTIFICADOR_FIELD] = decTEA_ID;
                //}

                //RegistrarAuditoria();

                //CompleteTransaction();

				return (decTEA_ID);
			}
			catch (SqlException sqlEx)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_TIPO_ENTIDAD_ARTISTICA"), sqlEx);
			}
			catch (Exception ex)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "ART_TIPO_ENTIDAD_ARTISTICA"), ex);
			}
		}

		public void ActualizarTipoEntidadArtistica(TipoEntidadArtisticaData datos)
		{
			DataTable tabla = datos.Tables[TipoEntidadArtisticaData.ART_TIPO_ENTIDAD_ARTISTICA_TABLE];
			TipoEntidadArtisticaData tipoEntidadArtisticaDataAnt = new TipoEntidadArtisticaData();
			try
			{
                //if (this.RegistroAuditoria!=null)
                //{
                //    tipoEntidadArtisticaDataAnt = ConsultarTipoEntidadArtistica(Convert.ToDecimal(tabla.Rows[0][TipoEntidadArtisticaData.TEA_ID_FIELD]));
                //}
				
                //StartTransaction();

				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(TEA_ID_PARAM, row[TipoEntidadArtisticaData.TEA_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(TEA_DESCRIPCION_PARAM, row[TipoEntidadArtisticaData.TEA_DESCRIPCION_FIELD]);
					SqlParameter param3 = new SqlParameter(TEA_AREA_ID_PARAM, row[TipoEntidadArtisticaData.TEA_AREA_ID_FIELD]);

					SqlParameter[] parameters = {param1, param2,param3};

					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_TIPO_ENTIDAD_ARTISTICA", parameters);
				}

                //RegistrarAuditoria(tipoEntidadArtisticaDataAnt.Tables[0],tabla);

                //CompleteTransaction();
			}
			catch (SqlException sqlEx)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_TIPO_ENTIDAD_ARTISTICA"), sqlEx);
			}
			catch (Exception ex)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "ART_TIPO_ENTIDAD_ARTISTICA"), ex);
			}
		}

		/// <summary>
		/// Elimina un registro de la entidad Arttipoentidadartistica
		/// </summary>
		/// <param name="parTEA_ID">Identificador del registro
		public void EliminarTipoEntidadArtistica(decimal parTEA_ID)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(TEA_ID_PARAM, parTEA_ID);

				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_TIPO_ENTIDAD_ARTISTICA", parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_TIPO_ENTIDAD_ARTISTICA"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "ART_TIPO_ENTIDAD_ARTISTICA"), ex);
			}
		}

		public void EliminarTipoEntidadArtistica(ArrayList arrIDs)
		{
			try
			{
                //StartTransaction();

				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(TEA_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_TIPO_ENTIDAD_ARTISTICA", parameters);
				}

                //RegistrarAuditoria();
				
                //CompleteTransaction();
			}
			catch (SqlException sqlEx)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_TIPO_ENTIDAD_ARTISTICA"), sqlEx);
			}
			catch (Exception ex)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "ART_TIPO_ENTIDAD_ARTISTICA"), ex);
			}
		}

	}
}